package org.springblade.modules.repair.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.core.mp.support.Query;
import org.springblade.flow.repair.parts.vo.ProcessTaskVO;
import org.springblade.modules.repair.dto.PartsWorkSaveDTO;
import org.springblade.modules.repair.dto.PartsWorkUpdateDTO;
import org.springblade.modules.repair.entity.MaintainPartsWork;
import org.springblade.modules.repair.entity.MaintainPlanContent;
import org.springblade.modules.repair.vo.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface MaintainPartsWorkService extends BaseService<MaintainPartsWork> {

	/**
	 * 添加部件申请记录
	 * @param partsWorkSaveDTO 申请记录参数
	 * @return 工单id
	 */
	Boolean savePartsWork(PartsWorkSaveDTO partsWorkSaveDTO);

	/**
	 * 审批通过处理逻辑
	 * @param processPass 参数
	 */
	void updatePartsWorkStatus(ProcessTaskVO processPass);

	/**
	 * 修改配件申请记录
	 * @param partsWorkSaveDTO 参数
	 * @return 结果
	 */
	Boolean editPartsWork(PartsWorkSaveDTO partsWorkSaveDTO);

	/**
	 * 配件申请-重新提交-申请记录
	 * @param partsWorkSaveDTO 参数
	 * @return 成功与否
	 */
	Boolean resubmitPartsWork(PartsWorkSaveDTO partsWorkSaveDTO);

	Boolean finish(MaintainPlanContent partsWorkSaveDTO);

    PartsWorkDetailVO selectPartsWorkDetail(Long planId);

	IPage<ElevatorMalfunctionPartsVO> selectElevatorPartsWorkPage(PartsWorksPageQuery pageQuery, IPage<ElevatorMalfunctionPartsVO> page);

	/**
	 * 根据流程实例id查询申请配件工单基本信息
	 * @param processInstanceId
	 * @return
	 */
	PartsSimpleInfoVO getPartsSimpleInfo(String processInstanceId);


	HashMap<String,Object> selectElevatorPartsWorkAuditPage(PartsWorksPageQuery pageQuery, IPage<ElevatorMalfunctionPartsVO> page);
	/**
	 * 根据工单id查询申请配件工单基本信息
	 * @param planId
	 * @return
	 */
	PartsSimpleInfoVO getPartsSimpleInfoByPlanId(Long planId);

	/**
	 * 根据维修配件记录的id 获取配件工单
	 * @param ids    维修配件记录的id
	 * @return 数据集
	 */
	List<MaintainPartsWork> getMaintainPartsWorkListOfMalId(List<Long> ids);

	/**
	 * 配件申请分页
	 * @param param
	 * @param page
	 * @return
	 */
	IPage<PartsApplyDetailVO> partsApplyPage(Map<String, Object> param, IPage<PartsApplyDetailVO> page);

	/**
	 * 撤回申请
	 * @param planId
	 * @return
	 */
	boolean cancelApply(Long planId);
}
